// Telnet server

import java.net.*;
import java.io.*;
import java.lang.*;
import java.io.*;
import java.util.*;

public class TelnetServer {
    public static void main(String args[]) throws Exception {
        ServerSocket Soc = new ServerSocket(5217);
        while (true) {
            System.out.println("服务器启动");
            Socket CSoc = Soc.accept();
            System.out.printf("[%s,%d]客户端上线",CSoc.getInetAddress(),CSoc.getPort());
            System.out.println();
            AcceptTelnetClient ob = new AcceptTelnetClient(CSoc);
        }
    }
}

class AcceptTelnetClient  {
    Socket ClientSocket;
    DataInputStream din;
    DataOutputStream dout;
    String LoginName;
    String Password;

    AcceptTelnetClient(Socket CSoc) throws Exception {

        ClientSocket = CSoc;
        System.out.println("Client Connected ...");
        DataInputStream din = new DataInputStream(ClientSocket.getInputStream());
        DataOutputStream dout = new DataOutputStream(ClientSocket.getOutputStream());
        System.out.println("Waiting for UserName And Password");
        LoginName = din.readUTF();
        Password = din.readUTF();
        run();
    }

    public void run() {

        try {
            DataInputStream din = new DataInputStream(ClientSocket.getInputStream());
            DataOutputStream dout = new DataOutputStream(ClientSocket.getOutputStream());

            BufferedReader brFin = new BufferedReader(new FileReader("Passwords.txt"));

            String LoginInfo;
            boolean allow = false;

            while ((LoginInfo = brFin.readLine()) != null) {
                StringTokenizer st = new StringTokenizer(LoginInfo);
                if (LoginName.equals(st.nextToken()) && Password.equals(st.nextToken())) {
                    dout.writeUTF("ALLOWED");
                    allow = true;
                    break;
                }
            }

            brFin.close();

            if (allow == false) {
                dout.writeUTF("NOT_ALLOWED");
            }

            while (allow) {
                String strCommand;
                strCommand = din.readUTF();
                if (strCommand.equals("quit")) {
                    allow = false;
                } else {
                    System.out.printf("[%s,%d]客户端：",ClientSocket.getInetAddress(),ClientSocket.getPort());
                    System.out.print("请求："+strCommand);
                    System.out.println("回应："+strCommand);
                    dout.writeUTF(strCommand);
                }
            }
            ClientSocket.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
